#pragma once

#include <mutex>
#include <queue>

#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <websocketpp/frame.hpp>
typedef websocketpp::connection_hdl connection_hdl;


// 用于通过主连接，给qml客户端发送一些短小的数据消息，发送大体积的数据就走别的模块和连接了
class SendTask
{
public:
    connection_hdl hdl_;
    std::string text_;
public:
    SendTask(connection_hdl h, std::string t)
    : hdl_(h), text_(t) {};
    ~SendTask(){};
};


class SendTaskQueue
{

public:
    SendTaskQueue(/* args */);
    ~SendTaskQueue();
    static SendTaskQueue *getInstance()
    {
        if (nullptr == obj_)
        {
            singlock_.lock();
            if (nullptr == obj_)
            {
                obj_ = new SendTaskQueue();
            }
            singlock_.unlock();
        }
        return obj_;
    }

    void push(SendTask& in)
    {
        queue_lock_.lock();
        queue_.push(in);
        queue_lock_.unlock();
    }
    SendTask front_pop()
    {
        queue_lock_.lock();
        SendTask front_task = queue_.front();
        queue_.pop();
        queue_lock_.unlock();

        return front_task;
    }

private:
    std::queue<SendTask> queue_;
    std::mutex queue_lock_;

    static SendTaskQueue *obj_;
    static std::mutex singlock_;
};

SendTaskQueue *SendTaskQueue::obj_ = nullptr;
std::mutex SendTaskQueue::singlock_;

SendTaskQueue::SendTaskQueue()
{
}

SendTaskQueue::~SendTaskQueue()
{
}


